package com.lpit.crawler;

public class DelayedUtils {

    public static void delayed(long time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static Object delayed(DelayedCallback delayedCallback) {
        boolean found = false;
        /*睡眠时间*/
        long sleepTime = delayedCallback.sleepTime();
        /*超时时间*/
        long timeOut = delayedCallback.timeOut();
        /*开始时间*/
        long currentTime = System.currentTimeMillis();
        /*创建Object对象接收*/
        Object result;
        /*无线循环，直到指定的结果满足退出循环*/
        while (true) {
            /*睡眠*/
            try {
                Thread.sleep(sleepTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            /*睡眠前跟睡眠后的时间差*/
            long elapsedTime = System.currentTimeMillis() - currentTime;
            /*检查延迟回调对象是否仍然存在。*/
            boolean exists = delayedCallback.isExist();
            /*调用延迟回调对象的callBack()方法，传入经过的时间作为参数，这个方法是延迟回调的实际执行方法。*/
            result = delayedCallback.callBack(elapsedTime);

            if (exists) {
                /*表示找到了符合条件的情况。*/
                found = true;
            } else if (elapsedTime > timeOut) {
                /*如果经过的时间超过了超时时间（elapsedTime > timeOut），表示没有找到符合条件的情况。*/
                found = true;
            }
            /*表示已经找到满足条件的情况，通过break语句跳出循环*/
            if (found) {
                break;
            }
        }
        /*返回延时回调的最终结果*/
        return result;
    }
}
